package com.xiaohongshu.kafkademo.stream;

import java.util.*;
import java.util.function.BinaryOperator;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class t1 {

    private static List<Author> getAuthors() {
        Author author1 = new Author(1L, "雷蒙多", 33, "简介1", null);
        Author author2 = new Author(2L, "亚拉索", 15, "简介2", null);
        Author author3 = new Author(3L, "易", 14, "简介3", null);
        Author author4 = new Author(3L, "易", 14, "简介3", null);

        List<Book> books1 = new ArrayList<>();
        List<Book> books2 = new ArrayList<>();
        List<Book> books3 = new ArrayList<>();

        books1.add(new Book(1L, "刀的两侧是光明与黑暗", "哲学,爱情", 88, "用一把刀划分了爱恨"));
        books1.add(new Book(2L, "一个人不能死在同一把刀下", "个人成长,爱情", 99, "讲述如何从失败中明悟真理"));

        books2.add(new Book(3L, "那风吹不到的地方", "哲学", 85, "带你用思维去领略世界的尽头"));
        books2.add(new Book(3L, "那风吹不到的地方", "哲学", 85, "带你用思维去领略世界的尽头"));
        books2.add(new Book(4L, "吹或不吹", "爱情,个人传记", 56, "一个哲学家的恋爱观注定很难把他所在的时代理解"));

        books3.add(new Book(5L, "你的剑就是我的剑", "爱情", 56, "无法想象一个武者能对他的伴侣这么的宽容"));
        books3.add(new Book(6L, "风与剑", "个人传记", 100, "两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?"));
        books3.add(new Book(6L, "风与剑", "个人传记", 100, "两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?"));
        author1.setBooks(books1);
        author2.setBooks(books2);
        author3.setBooks(books3);
        author4.setBooks(books3);

        return new ArrayList<>(Arrays.asList(author1, author2, author3, author4));
    }


    //用 getAuthors() 方法获取到作家的集合，打印出所有年龄小于18的作家的名字，并且要注意去重。
    public static void main(String[] args) {
//         getAuthors().stream()
//                .filter(author -> author.getAge() < 18)
//                .distinct()
//                .forEach(author -> System.out.println(author.getName()));

//        getAuthors().stream()
//                .sorted(new Comparator<Author>() {
//                    @Override
//                    public int compare(Author o1, Author o2) {
//                        return o1.getAge() - o2.getAge();
//                    }
//                })
//                .forEach(author -> System.out.println(author.getAge()));
//        getAuthors().stream()
//                .flatMap(author -> author.getBooks().stream()).distinct()
//                .forEach(book -> System.out.println(book.getName()));


        Map<String, List<Book>> map = getAuthors().stream()
                .collect(Collectors.toMap(
                        author -> author.getName(),
                        author -> author.getBooks()
                        ,
                        (books, books2) -> books2
                ));

    }
}
